package com.winhxd.b2c.system.service;

import com.winhxd.b2c.common.domain.PagedList;
import com.winhxd.b2c.common.domain.system.user.condition.CheckUserCondition;
import com.winhxd.b2c.common.domain.system.user.condition.ResetPasswordCondition;
import com.winhxd.b2c.common.domain.system.user.condition.SysUserCondition;
import com.winhxd.b2c.common.domain.system.user.condition.SysUserResetPasswordCondition;
import com.winhxd.b2c.common.domain.system.user.dto.SysUserDTO;
import com.winhxd.b2c.common.domain.system.user.dto.SysUserPasswordDTO;
import com.winhxd.b2c.common.domain.system.user.model.SysUser;
import com.winhxd.b2c.common.domain.system.user.vo.UserInfo;

import java.util.List;

public interface SysUserService {

    /**
     * 新增用户
     * @author zhangzhengyang
     * @date 2018/8/1
     * @param sysUserDTO
     * @return int
     */
    SysUser saveSysUser(SysUserDTO sysUserDTO);

    /**
     * 修改用户
     * @author zhangzhengyang
     * @date 2018/8/1
     * @param sysUser
     * @return int
     */
    int modifySysUser(SysUser sysUser);

    /**
     * 修改密码
     * @author zhangzhengyang
     * @date 2018/8/1
     * @param sysUser
     * @return void
     */
    void modifyPassword(SysUserPasswordDTO sysUser);

    /**
     * 查询用户列表
     * @author zhangzhengyang
     * @date 2018/8/1
     * @param condition
     * @return java.util.List<com.winhxd.b2c.common.domain.system.sys.vo.SysUserVO>
     */
    PagedList<SysUser> findSysUserPagedList(SysUserCondition condition);

    /**
     * 根据登录账号获取用户信息
     * @author zhangzhengyang
     * @date 2018/8/1
     * @param userCode
     * @return com.winhxd.b2c.common.domain.system.sys.vo.SysUserVO
     */
    SysUser getSysUserByAccount(String userCode);

    /**
     * 根据主键获取用户信息
     * @author zhangzhengyang
     * @date 2018/8/1
     * @param id
     * @return com.winhxd.b2c.common.domain.system.sys.vo.SysUserVO
     */
    SysUser getSysUserById(Long id);

    /**
     * 根据主键禁用用户
     * @author zhangzhengyang
     * @date 2018/8/7
     * @param id
     */
    int disabled(Long id);

    /**
     * 根据主键启用用户
     * @author songkai
     * @date 2018/8/23
     * @param id
     */
    int enable(Long id);

    /**
     * 重置密码
     *
     * @param sysUserResetPasswordCondition
     * @return
     */
    int updatePassword(SysUserResetPasswordCondition sysUserResetPasswordCondition);

    /** 根据condition查询用户sys_user信息
     * @author genghaifei
     * @Description
     * @date
     * @param
     * @return
     */
    SysUser getSysUserByCondition(CheckUserCondition condition);

    /** 根据部门查询员工接口-分页
     * @author genghaifei
     * @Description
     * @date
     * @param
     * @return
     */
    PagedList<SysUser> findUserPageListByOrgId(SysUserCondition condition);



    /** 根据parendID查询某个一级分销商下面有多少二级分销商
     * @author genghaifei
     * @Description
     * @date
     * @param
     * @return
     */
    int countDistributorByParentId(Long parentId);

    /** 查询用户列表 - 不分页
     * @author genghaifei
     * @Description
     * @date
     * @param
     * @return
     */
    List<SysUser> findSysUserList(SysUserCondition condition);

    /** 根据customerId修改用户手机号
     * @author genghaifei
     * @Description
     * @date
     * @param
     * @return
     */
    void modifyMobileByCustomerId(SysUserCondition condition);

    /** 重置密码
     * @author genghaifei
     * @Description
     * @date
     * @param
     * @return
     */
    void resetUserPassword(ResetPasswordCondition condition);

    /** 重置密码 - 根据 customerId
     * @author genghaifei
     * @Description
     * @date
     * @param
     * @return
     */
    Long updatePasswordByCustomerId(ResetPasswordCondition condition);

    /** 根据一个值来查询账号或密码是否存在用户数据
     * @author genghaifei
     * @Description
     * @date
     * @param
     * @return
     */
    List<SysUser> findUserListByCondition(CheckUserCondition condition);
}
